package org.adit.spring.hibernate.controller;

import java.util.Date;
import java.util.List;

import org.adit.spring.hibernate.dao.PontoDao;
import org.adit.spring.hibernate.entity.Ponto;
import org.adit.spring.hibernate.infra.Restrito;

import br.com.caelum.vraptor.Delete;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Put;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.view.Results;

@Resource
public class PontosController{

	private PontoDao dao;

	private final Result result;

	public PontosController( PontoDao dao, Result result) {
		this.dao = dao;
		this.result = result;
	}

	@Restrito
	@Post
	@Path("/pontos/novo")
	public void adiciona(Ponto ponto) {
		ponto.setData(new Date());
		dao.salva(ponto);
		result.redirectTo(PontosController.class).resultado(ponto.getId().toString());
	}

	@Restrito
	@Get
	@Path("/pontos")
	public void formulario() {

	}

	@Restrito
	@Get
	@Path("/pontos/{id}")
	public Ponto edita(Long id) {
		return dao.carrega(id);
	}

	@Restrito
	@Put
	@Path("/pontos/{ponto.id}")
	public void altera(Ponto ponto) {
		dao.atualiza(ponto);
		result.redirectTo(PontosController.class).resultado("OK");
	}

	@Restrito
	@Delete
	@Path("/pontos/{id}")
	public void remove(Long id) {
		Ponto job = dao.carrega(id);
		dao.remove(job);
		result.redirectTo(PontosController.class).resultado("OK");
	}

	@Get
	@Path("/pontos/lista")
	public List<Ponto> lista() {
		return dao.listaTudo();
	}
	
	@Get
	@Path("/pontos/busca")
	public List<Ponto> busca() {
		return dao.listaTudo();
	}

	@Get
	@Path("/pontos/buscaNome")
	public List<Ponto> busca(String nome) {
		result.include("nome", nome);
		return dao.busca(nome);
	}

	@Get
	@Path("/pontos/todos.json")
	public void todosJson() {
		result.use(Results.json()).from(dao.listaTudo()).serialize();
	}
	
	@Get
	@Path("/pontos/busca.json")
	public void buscaJson(String q) {
		result.use(Results.json()).from(dao.busca(q))
		.exclude("id","comment")
		.serialize();
	}
	
	@Get
	@Path("/pontos/resultado")
	public void resultado(String id){
		  result.include("id", id);
	}
}